package structuralModel.agentModel.dynamicProxy.myAnnotation2;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 功能描述:我方面
 * 2024/08/26
 *
 * @author ZhangYi
 */

@Aspect
@Component
public class MyAspect {
//	Around 通知允许在方法调用之前和之后执行自定义代码。它是最强大的通知类型，因为它可以完全控制何时以及如何继续执行目标方法。
	@Around("serviceLayerOperations()")
	public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
		System.out.println("Before method execution");

		Signature signature = joinPoint.getSignature();

		// Proceed with the method invocation
		Object result = joinPoint.proceed();

		System.out.println("After method execution");

		return result;
	}

	// Pointcut 是一个切入点表达式，用来指定切面应该在哪里切入。在 Spring AOP 中，你可以使用 @Pointcut 注解来定义一个切入点。
	// 哪些方法会被代理
	@Pointcut("execution(* structuralModel.agentModel.dynamicProxy.myAnnotation2.*.*(..))")
	public void serviceLayerOperations() {
	}
}
